Python en TP de Physique-Chimie (extrait)

Le but de ce notebook est de vous rappeler toutes les possibilités intéressantes que vous offre Python en TP de Physique-Chimie.

Table des Matières

Réaliser des calculs mathématiques utiles

Résoudre une équation différentielle

Retour à la table des matières

Dans cette partie, nous allons voir comment résoudre simplement une équation-différentielle :

Présentation

Revenir au menu de la résolution des équations différentielles

La résolution d'équations différentielles peut se faire efficacement à l'aide de la fonction odeint du module scipy.integrate. Pour l'utiliser, il faut écrire le problème à résoudre sous la forme : $$ \frac{dY}{dt}=F(Y,t)$$ $$Y(0)=Y_0$$

Si cette résolution semble a priori être uniquement celle d'une équation d'ordre 1, elle permet en fait de résoudre une équation d'ordre $N$ : il suffit alors que $Y$ soit un vecteur à $N$ éléments. Nous l'étudierons dans les exemples.

A chaque fois, il faudra donc:

  1. Mettre le problème sous la forme demandée et en déduire la fonction $F$
  2. Définir la fonction $F$ sous Python
  3. Utiliser y=odeint(F,y0,t,args=())args correspond aux arguments de $F$ qui ne sont ni $Y$ ni $t$ (et correspondent à des paramètres du problème par exemple). t est le tableau numpy correspondant aux instants où l'on cherche $Y$.

1er exemple simple : charge d'un condensateur

Revenir au menu de la résolution des équations différentielles

On cherche à déterminer la tension $s$ aux bornes d'un condensateur lors de la charge d'un circuit $RC$, régi par l'équation différentielle : $$s+\tau \frac{ds}{dt}=E$$ $$s(0)=0$$

Le problème se met donc sous la forme : $$\frac{ds}{dt}=\frac{E-s}{\tau}=F(s,t)$$ $$s(0)=0$$

Définissons $F$ :

Exécutons la fonction odeint et traçons le résultat :

2ème exemple : équation non linéaire d'ordre 2 - le pendule simple

Revenir au menu de la résolution des équations différentielles

On s'intéresse désormais à l'équation non linéaire d'ordre 2 modélisation les oscillations d'un pendule de longueur $l$, de masse $m$ et soumis à une force de frottement fluide de coefficient $h$ : $$\frac{d^2 \theta}{dt^2}+\frac{h}{m} \frac{d\theta}{dt}+\frac{g}{l}\sin(\theta)=0$$ On poser les conditions initiales suivantes : $$\theta(t=0)=\theta_0$$ $$\frac{d\theta}{dt}(t=0)=\omega_0$$ Pour se ramener au problème d'ordre 1 résolu par odeint, on va poser le vecteur : $$Y= \begin{bmatrix} \theta \\ \dot{\theta}\end{bmatrix}$$ On déduit : $$\dot{Y}= \begin{bmatrix} \dot{\theta} \\ \ddot{\theta} \end{bmatrix}=\begin{bmatrix} \dot{\theta} \\ -\frac{h}{m} \dot{\theta}-\frac{g}{l}\sin(\theta) \end{bmatrix} = F(Y,t)$$ Définissons $F$ sous Python :

Résolvons ensuite l'équation :

On peut maintenant s'amuser un peu plus en animant tout cela : rendez-vous ici

3ème exemple : l'oscillateur à Pont de Wien

Revenir au menu de la résolution des équations différentielles

Dans le TP sur l'oscillateur quasi-sinusoïdal à Pont de Wien, on montre que la tension de sortie de l'amplificateur opérationnel $s$ était régie par le jeu d'équations suivant :

où :

Voyons ci-dessous comment résoudre ce problème, en posant : $$Y= \begin{bmatrix} s \\ \dot{s}\end{bmatrix}$$ et $$\dot{Y}=F(Y,t)$$

Exemples de simulations intéressantes

Le pendule animé

Retour à la table des matières

Avant d'étudier cette partie, il faut s'assurer d'avoir revu et compris comment résoudre une équation différentielle avec Python. On pourra passer un peu de temps sur l'exemple de résolution du pendule.

C'est bon ? Alors allons-y. Le but va être de fabriquer cette animation :

Choisissons d'abord un angle initial et une vitesse initiale pour le pendule :

Résolvons l'équation différentielle pour trouver $\theta$ et $\dot{\theta}$ à tout instant :

A l'aide de la fonction pos, nous déterminons les coordonnées de l'extrémité du pendule. Nous créeons aussi les listes temps, theta et thetapoint qui grandiront au cours de l'animation et qui permettront de voir les graphes se tracer progressivement.

On peut alors commencer à coder l'animation :

On peut ensuite démarrer l'animation. Préparons tout d'abord la figure :

Et réalisons l'animation désormais :